<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>组件的嵌套</title>
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <div id="root">
      <!-- <app></app> -->
    </div>
  </body>
  <script>
    // 定义 student 组件
    const student = Vue.extend({
      template: `
      <div>
          <h2>学生姓名{{name}}</h2>
          <h2>学生年龄{{age}}</h2>
      </div>
      `,
      data() {
        return {
          name: "尚硅谷",
          age: 18,
        };
      },
    });

    // 定义 school 组件
    const school = {
      template: `
      <div>
          <h2>学校名称{{name}}</h2>
          <h2>学校地址{{address}}</h2>
          <student></student>
      </div>
      `,
      data() {
        return {
          name: "尚硅谷",
          address: "北京",
        };
      },
      // 注册组件(局部)
      // 组件嵌套：在一个组件中注册另外一个组件,并在该组件的template中使用
      components: {
        student,
      },
    };

    // 定义 hello 组件
    const hello = {
      template: `
      <div>
        <h2>你好啊 {{name}}</h2>
      </div>
      `,
      data() {
        return {
          name: "Tom",
        };
      },
    };

    // 定义 app 组件 一般开发中app管理所有组件
    const app = Vue.extend({
      template: `
      <div>
        <hello></hello>
        <school></school>
      </div>
      `, // 模板中要有一个根元素
      components: {
        school,
        hello,
      },
    });

    // 创建vm
    new Vue({
      el: "#root",
      template: `
      <app></app>
      `, // <div id="root"></div> 会丢失
      // 注册组件(局部)
      components: {
        app,
      },
    });
  </script>
</html>
